package org.wanho.shop.service.impl;

import org.wanho.shop.dao.ProductDao;
import org.wanho.shop.dao.impl.ProductDaoImpl;
import org.wanho.shop.entity.Item;
import org.wanho.shop.entity.Product;
import org.wanho.shop.service.CartService;
import org.wanho.shop.vo.Cart;

import java.util.List;

/**
 * Author：汤小洋
 * Date：2023-04-26 15:14
 * Description：<描述>
 */
public class CartServiceImpl implements CartService {

    ProductDao productDao = new ProductDaoImpl();

    @Override
    public void add(Cart cart, int productId) {
        Product product = productDao.selectById(productId);

        /**
         * 加入购物车有两种情况：
         */
        // 1.当前购物车中已经存在该商品
        List<Item> items = cart.getItems();
        for (Item item : items){
            if(item.getProduct().getId() == productId){
                // 更新数量，加1
                item.setNum(item.getNum()+1);
                // 更新明细总价
                item.setPrice(product.getPrice() * item.getNum());

                // 更新购物车总价
                cart.setPrice(cart.getPrice() + product.getPrice());
                return;
            }
        }

        // 2.当前购物车中尚未存在该商品
        Item item = new Item();
        item.setProduct(product);
        item.setNum(1);
        item.setPrice(product.getPrice());
        cart.addItem(item);
        cart.setPrice(cart.getPrice() + product.getPrice());
    }

    @Override
    public void removeById(Cart cart, int productId) {
        List<Item> items = cart.getItems();
        for(int i=0;i<items.size();i++){
            Item item = items.get(i);
            if(item.getProduct().getId() == productId){
                // 更新购物车总价
                cart.setPrice(cart.getPrice() - item.getPrice());
                cart.removeItem(item);
                break;
            }
        }
    }

    @Override
    public void modify(Cart cart, int productId, int num) {
        List<Item> items = cart.getItems();
        for(int i=0;i<items.size();i++){
            Item item = items.get(i);
            if(item.getProduct().getId() == productId){
                Double oldPrice = item.getPrice();

                // 更新数量
                item.setNum(num);
                // 更新明细价格
                item.setPrice(item.getProduct().getPrice()*num);
                // 更新购物车总价
                cart.setPrice(cart.getPrice() - oldPrice + item.getPrice());
                break;
            }
        }
    }
}
